package com.getan.boot.common.utils;

/**
 * 位置工具类
 *
 * <p>
 * 源码来自：<a href="https://v2ex.com/t/661809">...</a>
 * <p>
 *
 * @author Bruce.Gong
 * @since 1.0.0-SNAPSHOT
 */
@SuppressWarnings("unused")
public class GeoUtils {

    /**
     * 地球的半径 (m)
     */
    public static final double EARTH_RADIUS = 6378137;

    /**
     * 根据经纬度计算两点之间的距离 (m)
     *
     * @param lng1 位置 1 的经度
     * @param lat1 位置 1 的纬度
     * @param lng2 位置 2 的经度
     * @param lat2 位置 2 的纬度
     * @return 返回距离
     */
    public static double getDistance(double lng1, double lat1, double lng2, double lat2) {
        double radLat1 = radian(lat1);
        double radLat2 = radian(lat2);
        double a = radLat1 - radLat2;
        double b = radian(lng1) - radian(lng2);
        return (2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
                + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2))))
                * EARTH_RADIUS;
    }

    private static double radian(double d) {
        return d * Math.PI / 180.0;
    }

}
